package drawing2D;

import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.Color;
import java.awt.geom.Point2D;
import java.awt.geom.GeneralPath;
import java.util.Vector;

import context.Context;


// ********************************************************************
// *** CLASS: TerrengSnitt
// ********************************************************************
public class TerrengSnitt extends Drawing2D implements Context.Constants
{ private Vector<Point2D> p;
  
  
  // ******************************************************************
  // *** CONSTRUCTOR: TerrengSnitt
  // ******************************************************************
  public TerrengSnitt(Point2D.Double origo2D,double scale2D)
  { super(origo2D,scale2D);
  }

  // ******************************************************************
  // *** METHOD: setPrintScaling
  // ******************************************************************
  public void setPrintScaling2(double printScale)
  { set2DScaling(new Point2D.Double(2,14),printScale); }
  
  // ******************************************************************
  // *** METHOD: add
  // ******************************************************************
  public void add(Point2D p0,double dx,double[] dy)
  { p=new Vector<Point2D>();
    double x0=p0.getX();
    double y0=p0.getY();
    for(int i=0;i<dy.length;i+=2)
    { Point2D q=new Point2D.Double(x0+i*dx*scale2D*0.02,y0-dy[i]*scale2D*0.02);
      p.add(q);
    }
  }

  // ******************************************************************
  // *** METHOD: paint
  // ******************************************************************
  public void paint(Graphics2D g)
  { GeneralPath terreng=null;
    int n=p.size()-1;
    if(n<2) return;
    for(int i=0;i<n;i++)
    { Point2D q1=p.elementAt(i);
      Point2D q2=p.elementAt(i+1);
      // Visk ut under terreng
      GeneralPath path=new GeneralPath();
      path.moveTo((float)q1.getX(),(float)q1.getY());
      path.lineTo((float)q1.getX(),(float)q1.getY()+150);
      path.lineTo((float)q2.getX(),(float)q2.getY()+150);
      path.lineTo((float)q2.getX(),(float)q2.getY());
      path.closePath();
      g.setColor(Color.white);
      g.fill(path);
      // Samle opp terrenglinje
      if(terreng==null)
      { terreng=new GeneralPath();
        terreng.moveTo((float)q1.getX(),(float)q1.getY());
      }
      terreng.lineTo((float)q2.getX(),(float)q2.getY());
    }
    g.setColor(Color.black);
    g.setStroke(new BasicStroke(1.5f));
    g.draw(terreng);
    g.setStroke(defaultStroke);
  }

}